package com.yuhl.lambda;

import java.util.Comparator;
import java.util.TreeSet;

/**
 * @author yuhl
 * @Date 2021/6/27 14:09
 * @Classname LambdaDemo
 * @Description lambda表达式
 *
 * 从匿名内部类到lambda表达式的演变,使用java中现有的函说明问题
 */
public class LambdaDemo1 {

    /**
     * 使用常规方式进行书写
     */
    public void runableGeneral() {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("我是一个线程，我的名字为：" + Thread.currentThread().getName());
            }
        };

        runnable.run();
    }

    /**
     * 使用lambda表达式进行书写:优化1
     */

    public void runableLambda() {
        Runnable runnable = () ->{
            System.out.println("我是一个线程，我的名字为：" + Thread.currentThread().getName());
        };

        runnable.run();
    }

    /**
     * 使用lambda表达式进行书写：优化2
     */

    public void runableLambda2() {
        Runnable runnable = () ->  System.out.println("我是一个线程，我的名字为：" + Thread.currentThread().getName());
        runnable.run();
    }


//***************************************************************************************

    /**
     * 匿名内部类传递参数
     * 比较大小
     */

    public void compareGeneral() {
        TreeSet<Integer> treeSet = new TreeSet<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer i1, Integer i2) {
                //正序排列
                return Integer.compare(i1, i2);
                //倒序排列
//                return Integer.compare(i2, i1);
            }
        });
        treeSet.add(1);
        treeSet.add(4);
        treeSet.add(2);
        treeSet.add(3);

        System.out.println(treeSet);
    }

    /**
     * 匿名内部类传递参数
     * 比较大小 使用lambda表达式优化
     */
    public void compareLambda() {
        TreeSet<Integer> treeSet = new TreeSet<>((i1, i2) -> Integer.compare(i1, i2));

        treeSet.add(1);
        treeSet.add(4);
        treeSet.add(2);
        treeSet.add(3);
        System.out.println(treeSet);
    }
}
